<?php
/**
 * Nweb Framework
 *
 * This script is protected by copyright. It's use, copying, modification
 * and distribution without written consent of the author is prohibited.
 *
 * @category    source
 * @package     pl.nweb.framework.ftp
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @license     http://www.gnu.org/licenses/lgpl-3.0.txt  GNU Lesser General Public
 * @version     3.0 $Id$
 * @link        http://code.google.com/p/nweb-framework/
 * @link        http://framework.nweb.pl
 */

namespace pl\nweb\framework\ftp;

/**
 * Plik na serwerze FTP
 *
 * @category    source
 * @package     pl.nweb.framework.ftp
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @version     3.0 $Id$
 */
class File extends Element
{
    /**
     * Katalog pliku
     *
     * @var Directory
     */
    protected $_dir = null;

    /**
     * Konstruktor
     *
     * @param Directory $dir obiekt folderu
     * @param string $path pełna ścieżka elementu
     */
    public function __construct(Directory $dir, $path)
    {
        $this->_server = $dir->getClient();
        $this->_dir    = $dir;
        $this->_path   = $path;
    }

    /**
     * Zwraca obiekt katalogu w którym znajduje się plik
     *
     * @return Directory
     */
    public function getDirectory()
    {
        return $this->_dir;
    }

    /**
     * Zmienia nazwę katalogu
     *
     * @param string $newname nowa nazwa katalogu
     * @return boolean
     * @throws Exception
     */
    public function rename($newname)
    {
        $newname = basename($newname);
        $dir     = dirname($this->getPath());
        return $this->getClient()->rename(
            $this->getPath(),
            $dir . DIRECTORY_SEPARATOR . $newname
         );
    }

    /**
     * Pobiera plik do wskazanego miejsca
     *
     * @param string $destination plik docelowy
     * @param integer $mode tryb FTP_ASCII|FTP_BINARY
     * @return boolean
     * @throws Exception
     */
    public function download($destination, $mode = null)
    {
        return $this->getClient()->receive($this->getPath(), $destination, $mode);
    }

    /**
     * Zastępuje plik podanym plikiem
     *
     * @param string $file plik źródłowy
     * @param integer $mode tryb FTP_ASCII|FTP_BINARY
     * @return boolean
     * @throws Exception
     */
    public function replace($file, $mode = null)
    {
        $this->delete();
        return $this->getClient()->send(
            $file,
            $this->getPath(),
            $mode
        );
    }

    /**
     * Usuwa plik z serwera
     *
     * @return boolean
     * @throws Exception
     */
    public function delete()
    {
        return $this->getClient()->deleteFile($this->getPath());
    }
}